/**
 * 图片URL工具函数
 * 用于处理图片路径的拼接和转换
 */

/**
 * 获取完整的图片URL
 * @param {string} imagePath - 图片路径或文件名
 * @returns {string} 完整的图片URL
 */
export function getImageUrl(imagePath) {
  // 如果没有图片路径，返回默认占位符
  if (!imagePath) {
    return ''
  }
  
  // 如果已经是完整的URL（以http开头），直接返回
  if (imagePath.startsWith('http://') || imagePath.startsWith('https://')) {
    return imagePath
  }
  
  // 如果是以/assets/开头的路径，说明已经是完整的API路径
  if (imagePath.startsWith('/assets/')) {
    return getApiBaseUrl() + imagePath
  }
  
  // 如果只是文件名，需要拼接完整路径
  return `${getApiBaseUrl()}/assets/uploads/${imagePath}`
}

/**
 * 获取API基础URL
 * @returns {string} API基础URL
 */
function getApiBaseUrl() {
  // 优先使用环境变量
  if (import.meta.env.VITE_APP_API_BASE_URL) {
    return import.meta.env.VITE_APP_API_BASE_URL
  }
  
  // 如果没有配置环境变量，根据当前环境判断
  if (import.meta.env.DEV) {
    // 开发环境
    return 'http://localhost:3000'
  } else {
    // 生产环境，使用当前域名
    return window.location.origin
  }
}

/**
 * 获取图片的缩略图URL
 * @param {string} imagePath - 原始图片路径
 * @param {number} width - 宽度
 * @param {number} height - 高度
 * @returns {string} 缩略图URL
 */
export function getThumbnailUrl(imagePath, width = 300, height = 200) {
  const fullUrl = getImageUrl(imagePath)
  
  // 如果是外部URL，直接返回
  if (fullUrl.startsWith('http://') || fullUrl.startsWith('https://')) {
    return fullUrl
  }
  
  // 这里可以扩展为实际的缩略图服务
  // 目前直接返回原图
  return fullUrl
}

/**
 * 检查图片URL是否有效
 * @param {string} imagePath - 图片路径
 * @returns {Promise<boolean>} 是否有效
 */
export async function checkImageExists(imagePath) {
  const url = getImageUrl(imagePath)
  
  try {
    const response = await fetch(url, { method: 'HEAD' })
    return response.ok
  } catch (error) {
    console.warn('检查图片存在性失败:', error)
    return false
  }
}

/**
 * 获取图片的文件大小（字节）
 * @param {string} imagePath - 图片路径
 * @returns {Promise<number>} 文件大小
 */
export async function getImageSize(imagePath) {
  const url = getImageUrl(imagePath)
  
  try {
    const response = await fetch(url, { method: 'HEAD' })
    const contentLength = response.headers.get('content-length')
    return contentLength ? parseInt(contentLength, 10) : 0
  } catch (error) {
    console.warn('获取图片大小失败:', error)
    return 0
  }
}

/**
 * 格式化文件大小
 * @param {number} bytes - 字节数
 * @returns {string} 格式化后的大小
 */
export function formatFileSize(bytes) {
  if (bytes === 0) return '0 B'
  
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 从完整URL中提取文件名
 * @param {string} url - 完整URL
 * @returns {string} 文件名
 */
export function extractFilename(url) {
  if (!url) return ''
  
  // 移除查询参数
  const cleanUrl = url.split('?')[0]
  
  // 提取文件名
  return cleanUrl.split('/').pop() || ''
}

/**
 * 生成图片预览的样式对象
 * @param {string} imagePath - 图片路径
 * @param {object} options - 选项
 * @returns {object} 样式对象
 */
export function getImageStyle(imagePath, options = {}) {
  const {
    width = 'auto',
    height = 'auto',
    objectFit = 'cover',
    borderRadius = '0',
    fallback = 'none'
  } = options
  
  const url = getImageUrl(imagePath)
  
  return {
    width,
    height,
    objectFit,
    borderRadius,
    backgroundImage: fallback !== 'none' ? `url(${url})` : undefined,
    backgroundSize: objectFit,
    backgroundPosition: 'center',
    backgroundRepeat: 'no-repeat'
  }
}